home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 2.toast / pc / sample code / quicktime / quicktime for java / javasprites / src / cdf / capturedukeframe.java next >
Encoding:
Java Source  |  2000-09-28  |  4.5 KB  |  166 lines

  1. /*
  2.  * QuickTime for Java SDK Sample Code
  3.  
  4.    Usage subject to restrictions in SDK License Agreement
  5.  * Copyright: © 1996-1999 Apple Computer, Inc.
  6.  
  7.  */
  8. package cdf;
  9.  
  10. import java.awt.*;
  11. import java.awt.event.*;
  12. import java.io.*;
  13. import quicktime.app.*;
  14. import quicktime.app.anim.*;
  15. import quicktime.app.actions.BounceAction;
  16. import quicktime.app.actions.NextImageAction;
  17. import quicktime.app.actions.SimpleActionList;
  18. import quicktime.app.display.*;
  19. import quicktime.app.image.*;
  20. import quicktime.std.image.*;
  21. import quicktime.*;
  22. import quicktime.qd.*;
  23.  
  24.  
  25.  
  26. public class CaptureDukeFrame {
  27.     public QTCanvas canv;
  28.     ImageDataSequence ids;
  29.     QTImageDrawer qid;
  30.     MultipleImagePainter dd;
  31.     //public DukeAnim da;
  32.     int width;
  33.     private Frame showAfter;
  34.     private Frame addTo;
  35.     private Button b;
  36.     
  37.     //from duke anim
  38.     private TwoDSprite sprite;
  39. //    private ImageDataSequence images;
  40.     
  41.     private NextImageAction ni;
  42.     private BounceAction ba;
  43.     private SimpleActionList al;
  44.     private Compositor comp;
  45.     
  46.     public CaptureDukeFrame (Frame f, String title, int w) {
  47.  
  48.         addTo = f;
  49.         width = w;
  50.         canv = new QTCanvas(QTCanvas.kInitialSize, 0.5F, 0.5F);
  51.         addTo.add("Center", canv);
  52.                     
  53.         
  54.         addTo.addNotify();
  55.         b = new Button ("QT Capture");
  56.         b.addActionListener (new ActionListener() {
  57.             public void actionPerformed (ActionEvent ae) {
  58.                 try {
  59.                     dd.setCurrentFrame(0);
  60.                     qid.redraw(null);
  61.                     ImagePresenter id = qid.toImagePresenter();
  62.                     ImageDescription desc = id.getDescription();
  63.                     ids = new ImageDataSequence (desc);
  64.                     ids.append (id.getImage());
  65.                     
  66.                     for (int i = 1; i < dd.getNumberOfFrames(); i++) {
  67.                         dd.setCurrentFrame(i);
  68.                         qid.redraw(null);
  69.                         id = qid.toImagePresenter();
  70.                         ids.append (id.getImage());
  71.                     }
  72.                     dd.setCurrentFrame(0);
  73.                     //da = new DukeAnim (ids, new Dimension (width, 80), QDColor.white);
  74.                     if (ids == null) {
  75.                         QTSession.close();
  76.                         System.exit(0);
  77.                     }
  78.                     canv.removeClient();
  79.                     disableButton();
  80.                     
  81.                     //create compositor
  82.                     comp = new Compositor (new QDGraphics (new QDRect(new Dimension (width, 80))), QDColor.white, 35, 1);
  83.                     al = new SimpleActionList();
  84.                     Matrix matrix1 = new Matrix();
  85.                     matrix1.setTx(20);
  86.                     matrix1.setTy(0);
  87.                     //sprite.setMatrix (matrix1);
  88.                     sprite = new TwoDSprite(ids, 1, matrix1, true, 1);
  89.                     
  90.                     ImageSequencer seq = new ImageSequencer (ids);
  91.                     seq.setLooping (ImageSequencer.kLoopPalindrome);        
  92.                     ni = new NextImageAction (10, 1, seq, sprite);
  93.                     al.addMember(ni);
  94.                     //ba = new BounceAction (1, 0, comp, 35, 1, sprite); 
  95.                     ba = new BounceAction (10, 0, comp, sprite, 1.0F, 0); 
  96.                     al.addMember(ba);
  97.                     comp.addController(al);
  98.                     comp.addMember(sprite);
  99.             //            getTimer().setTicklish(al);
  100.                     comp.getTimer().setRate(1);
  101.                     canv.setClient (comp, true);
  102.                     
  103.                     //canv.setClient (da, true);
  104.                 } catch (QTException e) {
  105.                     e.printStackTrace();
  106.                 }
  107.             }
  108.         });
  109.         
  110.         addTo.add ("South", b);
  111.     }
  112.     
  113.     private void disableButton() {
  114.         b.setEnabled(false);
  115.     }
  116.     
  117.     
  118.     public void showDuke() {
  119.         try {            
  120.             File file = QTFactory.findAbsolutePath ("duke");
  121.             Image[] images = getImages (file.getAbsolutePath(), 17);
  122.             int width = images[0].getWidth(addTo);
  123.             int height = images[0].getHeight(addTo);
  124.             
  125.             dd = new MultipleImagePainter(images);
  126.             qid = new QTImageDrawer (dd, new Dimension (width, height), Redrawable.kMultiFrame);
  127.             qid.setRedrawing(true);
  128.             
  129.             canv.setClient (qid, true);
  130.         } catch (Exception ex) {
  131.             ex.printStackTrace();
  132.             QTSession.close();
  133.         }
  134.     }
  135.  
  136.             
  137.     Image[] getImages (String dir, int nimgs) throws Exception {
  138.         MediaTracker tracker = new MediaTracker (addTo);
  139.         
  140.         File fDir = new File(dir);
  141.         if (fDir.isDirectory() == false)
  142.             throw new FileNotFoundException (dir);
  143.         if (dir.charAt (dir.length() - 1) != File.separatorChar)
  144.             dir += File.separatorChar;
  145.  
  146.         // import gif images
  147.         Image[] images = new Image[nimgs];
  148.         for (int i=0; i < nimgs; i++) {        
  149.             images[i] = Toolkit.getDefaultToolkit().getImage(dir + "T" + i + ".gif");
  150.             tracker.addImage(images[i], i);
  151.         }
  152.         
  153.         // wait for them all to finish importing
  154.         try { tracker.waitForAll(); }
  155.         catch (InterruptedException e) { }
  156.         
  157.         if (tracker.isErrorAny()) throw new Exception ("Error in Media Tracker");
  158.  
  159.         // make sure images are prepared so the draw properly
  160.         for (int i = 0; i < nimgs; i++)
  161.             addTo.prepareImage (images[i], addTo);
  162.  
  163.         return images;
  164.     }
  165. }
  166.